package q667_constructArray;

public class Solution_1 {
    /*
    题目中需要构建一个最多有k个不同差值的数列
    这种方法是从特例推向一般的
    例如如果k = 1意味着所有的数字之间差值只能是1
    此时就只能按照升序或者降序排列
    当k = n - 1时，则需要交替的排列1, n, 2, n - 1, 3, n - 2, ...
    因此需要构建一个中间的方法，其中前一部分是交替的 后一部分是递减的
    或者前一部分是交替的 后一部分是递增的
     */
    public int[] constructArray(int n, int k) {
        int[] ans = new int[n];
        int lo = 1, hi = n;
        // 交替选前k个数
        for (int i = 0; i < k; i++) ans[i] = i % 2 == 0 ? lo++ : hi--;
        // 处理剩余的数(如果k是偶数，剩余的数要从hi开始递减，否则从lo开始递增)
        for (int i = k; i < n; i++) ans[i] = k % 2 == 0 ? hi-- : lo++;
        return ans;
    }
}
